#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Module Description: 语言版本常量
Date: 2018/11/28
Author:ZhongZhaoPai

ref:

* https://docs.microsoft.com/en-us/windows-hardware/customize/mobile/mcsf/set-languages-and-locales

"""


class LangEnum(object):
    # ZH_CN = "zh-cn"
    # ZH_TW = "zh-tw"
    # EN = "en"
    # KO_KR = "ko-kr"
    # JA_JP = "ja-jp"
    Simplified = 'zh-cn'
    Traditional = 'zh-tw'
    English = 'en'
    Korea = 'ko-kr'
    Japan = 'ja-jp'
    Thailand = 'th-la'
    Vietnam = 'vi-vn'
    Russia = 'ru-ru'
    Indonesia = 'id-id'
    Malaysia = 'ms-my'
    Germany = 'de-de'
    France = 'fr-fr'
    Spain = 'es-es'
    Portugal = 'pt-pt'
    India = 'hi-in'
    Turkey = 'tr-tr'
    Italy = 'it-it'
    Poland = 'pl-pl'
    Arabia = 'ar-sa'


class LangMapping(object):
    # 对应的数据库字段
    mapping = {
        'zh-cn': 'Simplified',
        'zh-tw': 'Traditional',
        'en': 'English',
        'ko-kr': 'Korean',
        'ja-jp': 'Japanese',
        'th-la': 'Thailand',
        'vi-vn': 'Vietnam',
        'ru-ru': 'Russia',
        'id-id': 'Indonesia',
        'ms-my': 'Malaysia',
        'de-de': 'Germany',
        'fr-fr': 'France',
        'es-es': 'Spain',
        'pt-pt': 'Portugal',
        'hi-in': 'India',
        'tr-tr': 'Turkey',
        'it-it': 'Italy',
        'pl-pl': 'Poland',
        'ar-sa': 'Arabia',
    }
    lang_mapping = {
        'zh-cn': '简体中文',
        'zh-tw': '繁体中文',
        'en': '英文',
        'ko-kr': '韩语',
        'ja-jp': '日语',
        'th-la': '泰语',
        'vi-vn': '越南语',
        'ru-ru': '俄语',
        'id-id': '印度尼西亚语',
        'ms-my': '马来语',
        'de-de': '德语',
        'fr-fr': '法语',
        'es-es': '西班牙语',
        'pt-pt': '葡萄牙语',
        'hi-in': '印度语',
        'tr-tr': '土耳其语',
        'it-it': '意大利语',
        'pl-pl': '波兰语',
        'ar-sa': '阿拉伯语',
    }

    device_push_mapping = {
        'zh-cn': 'zh-cn',
        'zh-tw': 'zh-tw',
        'en': 'en',
        'ko-kr': 'ko',
        'ja-jp': 'ja',
        'th-la': 'th',
        'vi-vn': 'vi',
        'ru-ru': 'ru',
        'id-id': 'in',
        'ms-my': 'ms',
        'de-de': 'de',
        'fr-fr': 'fr',
        'es-es': 'es',
        'pt-pt': 'pt',
        'hi-in': 'hi',
        'tr-tr': 'tr',
        'it-it': 'it',
        'pl-pl': 'pl',
        'ar-sa': 'ar',
    }


class LangUnicode(object):
    """
    不同语言对应unicode
    # (\u2006)六分之一空格，这个没有加入进合法字符集中，由客户端机制避免该字符
    # (\u4e00-\u9fa5 汉字)(\u0030-\u0039 数字)(\u0041-\u005a 大写字母)(\u0061-\u007a 小写字母)
    # (\u3001-\u303C \u3040-\u31FF 日文)(\uAC00-\uD7AF 韩文拼音)(\u1100-\u11FF 韩文字母)(\u3130-\u318F 韩文兼容字母)
    # (\u0E00-\u0E7F  泰文)
    # 越南文 http://vietunicode.sourceforge.net/charset/
    # (\u0000-\u007F) (\u0080-\u00FF) (\u0100-\u024F) (\u1E00-\u1EFF) (\u0300-\u036F) (\u20AB)
    # 俄语采用西里尔字母书写  https://zh.wikipedia.org/wiki/Unicode區段
    # 印尼语字母与英文相同，所以未添加印尼语区间
    # 马来语字母与英文相同
    # 德语主使用拉丁(Latin)字母
    # 法语采用拉丁(Latin)字母
    # 西班牙语采用拉丁(Latin)字母
    # 印度采用印地语，印地语采用天城文
    # 土耳其语语采用拉丁(Latin)字母
    # 阿拉伯语采用阿拉伯字母

    # 关于汉字：
    # (\u4e00-\u9fa5 汉字)是基本汉字的unicode字符集，现对汉字unicode字符集进行扩充
    # 汉字新增unicode字符集：基本汉字补充、扩展A、康熙部首、部首扩展、兼容汉字、
    #                     部件扩展、汉字笔画、汉语注音、注音扩展
    #                     https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php

    # 关于拉丁字母：
    # U+0000..U+007F:基本拉丁字母 U+0080..U+00FF:拉丁字母补充-1
    # U+0100..U+017F:拉丁字母扩展-A U+0180..U+024F:拉丁字母扩展-B
    """
    Simplified = [
        [u'\u2e80', u'\u2ef3'],  # 部首扩展
        [u'\u2f00', u'\u2fd5'],  # 康熙部首
        [u'\u3105', u'\u312f'],  # 汉语注音
        [u'\u31a0', u'\u31ba'],  # 注音扩展
        [u'\u31c0', u'\u31e3'],  # 汉字笔画
        [u'\u3400', u'\u4db5'],  # 扩展A

        [u'\u4e00', u'\u9fa5'],  # 基本汉字

        [u'\u9fa6', u'\u9fef'],  # 基本汉字补充
        [u'\ue400', u'\ue5e8'],  # 部件扩展
        [u'\uf900', u'\ufad9'],  # 兼容汉字
    ]
    Japan = [[u'\u3001', u'\u303C'], [u'\u3040', u'\u31FF']]
    Korea = [[u'\uAC00', u'\uD7AF'], [u'\u1100', u'\u11FF'], [u'\u3130', u'\u318F']]
    Thailand = [[u'\u0E00', u'\u0E7F']]
    Vietnam = [[u'\u0000', u'\u007F'], [u'\u0080', u'\u00FF'], [u'\u0100', u'\u024F'],
               [u'\u1E00', u'\u1EFF'], [u'\u0300', u'\u036F'], [u'\u20AB', u'\u20AB']]
    Member = [[u'\u0030', u'\u0039']]
    English = [[u'\u0041', u'\u005a'], [u'\u0061', u'\u007a']]
    Russia = [[u'\u0400', u'\u04ff'], [u'\u0500', u'\u052F']]
    Latin = [[u'\u0000', u'\u007F'], [u'\u0080', u'\u00FF'], [u'\u0100', u'\u017F'],
             [u'\u0180', u'\u024F'], [u'\u0250', u'\u02AF'], [u'\u02B0', u'\u02FF']]
    India = [[u'\u0900', u'\u097F'], [u'\uA8E0', u'\uA8FF']]
    Arabia = [[u'\u0600', u'\u06FF'], [u'\u0750', u'\u077F'], [u'\u08A0', u'\u08FF'],
              [u'\uFB50', u'\uFDFF'], [u'\uFE70', u'\uFEFF']]


# 合法字符集合
LegalUnicode = (LangUnicode.Simplified, LangUnicode.Japan, LangUnicode.Korea, LangUnicode.Thailand,
                LangUnicode.Member, LangUnicode.English, LangUnicode.Vietnam, LangUnicode.Russia,
                LangUnicode.Latin, LangUnicode.India, LangUnicode.Arabia)

# 允许皇子起名的语言版本unicode
AllowUnicode = (LangUnicode.Simplified, LangUnicode.Japan, LangUnicode.Korea,
                LangUnicode.Thailand, LangUnicode.Vietnam, LangUnicode.Russia,
                LangUnicode.Latin, LangUnicode.India, LangUnicode.Arabia)

# 需支持空格的语言版本(英文单词有空格,韩文也有空格,泰文也有空格)
NeedAllowSpaceLang = (LangEnum.English, LangEnum.Korea, LangEnum.Thailand,
                      LangEnum.Vietnam, LangEnum.Russia, LangEnum.Indonesia,
                      LangEnum.Malaysia, LangEnum.Germany, LangEnum.France,
                      LangEnum.Spain, LangEnum.Portugal, LangEnum.India,
                      LangEnum.Turkey, LangEnum.Italy, LangEnum.Poland,
                      LangEnum.Arabia)
